/*
 * PagEventosEtapa.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlAtividade;
import srac.controleatividades.cdp.Etapa;

public class PagEventosEtapa extends GenericForwardComposer {

    private CtrlAtividade ctrl = CtrlAtividade.getInstance();
    private Window winEventosEtapa;
    private Listbox listEtapas;
    private Div boxInformacao;
    private Label msg;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrl.setPagEventosEtapa(this);
        while (listEtapas.getItemCount() > 0) {
            listEtapas.removeItemAt(0);
        }
        List<Etapa> etapas = ctrl.obterEtapas(); //Obtem todas as etapas cadastradas

        if (etapas != null) {
            for (int i = 0; i < etapas.size(); i++) { //Mostram elas em forma de tabela na tela
                Etapa e = etapas.get(i);
                Listitem linha = new Listitem(e.getDescricao(), e);
                
                
                linha.appendChild(new Listcell(etapas.get(i).getDataInicioSubmissao().getTime().getDate() + "/"
                        + (e.getDataInicioSubmissao().getTime().getMonth() + 1) + "/"
                        + (e.getDataInicioSubmissao().getTime().getYear() + 1900)));

                linha.appendChild(new Listcell(etapas.get(i).getDataFimSubmissao().getTime().getDate() + "/"
                        + (e.getDataFimSubmissao().getTime().getMonth() + 1) + "/"
                        + (e.getDataFimSubmissao().getTime().getYear() + 1900)));
                
                linha.appendChild(new Listcell(etapas.get(i).getDataFimVerificacao().getTime().getDate() + "/"
                        + (e.getDataFimVerificacao().getTime().getMonth() + 1) + "/"
                        + (e.getDataFimVerificacao().getTime().getYear() + 1900)));
                
                linha.appendChild(new Listcell(etapas.get(i).getDataFimValidacao().getTime().getDate() + "/"
                        + (e.getDataFimValidacao().getTime().getMonth() + 1) + "/"
                        + (e.getDataFimValidacao().getTime().getYear() + 1900)));

                linha.setParent(listEtapas);
            }
        }
    }
    
    public void onCreate$winEventosEtapa(Event event) {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winEventosEtapa.detach();
        }
    }

    public void addEtapa(Etapa e) {
        Listitem linha = new Listitem(e.getDescricao(), e);
                
                
        linha.appendChild(new Listcell(e.getDataInicioSubmissao().getTime().getDate() + "/"
                + (e.getDataInicioSubmissao().getTime().getMonth() + 1) + "/"
                + (e.getDataInicioSubmissao().getTime().getYear() + 1900)));
        linha.appendChild(new Listcell(e.getDataFimSubmissao().getTime().getDate() + "/"
                + (e.getDataFimSubmissao().getTime().getMonth() + 1) + "/"
                + (e.getDataFimSubmissao().getTime().getYear() + 1900)));
        linha.appendChild(new Listcell(e.getDataFimVerificacao().getTime().getDate() + "/"
                + (e.getDataFimVerificacao().getTime().getMonth() + 1) + "/"
                + (e.getDataFimVerificacao().getTime().getYear() + 1900)));
        linha.appendChild(new Listcell(e.getDataFimValidacao().getTime().getDate() + "/"
                + (e.getDataFimValidacao().getTime().getMonth() + 1) + "/"
                + (e.getDataFimValidacao().getTime().getYear() + 1900)));

        linha.setParent(listEtapas);
    }

    public void refreshEtapa(Etapa e) {
        for (int i = 0; i < listEtapas.getItemCount(); i++) {
            if (listEtapas.getItemAtIndex(i).getValue() == e) {
                listEtapas.getItemAtIndex(i).getChildren().clear();
                
                listEtapas.getItemAtIndex(i).appendChild(new Listcell(e.getDescricao()));

                listEtapas.getItemAtIndex(i).appendChild(new Listcell(e.getDataInicioSubmissao().getTime().getDate() + "/"
                        + (e.getDataInicioSubmissao().getTime().getMonth() + 1) + "/"
                        + (e.getDataInicioSubmissao().getTime().getYear() + 1900)));
                listEtapas.getItemAtIndex(i).appendChild(new Listcell(e.getDataFimSubmissao().getTime().getDate() + "/"
                        + (e.getDataFimSubmissao().getTime().getMonth() + 1) + "/"
                        + (e.getDataFimSubmissao().getTime().getYear() + 1900)));
                listEtapas.getItemAtIndex(i).appendChild(new Listcell(e.getDataFimVerificacao().getTime().getDate() + "/"
                        + (e.getDataFimVerificacao().getTime().getMonth() + 1) + "/"
                        + (e.getDataFimVerificacao().getTime().getYear() + 1900)));
                listEtapas.getItemAtIndex(i).appendChild(new Listcell(e.getDataFimValidacao().getTime().getDate() + "/"
                        + (e.getDataFimValidacao().getTime().getMonth() + 1) + "/"
                        + (e.getDataFimValidacao().getTime().getYear() + 1900)));
                break;
            }
        }
    }

    public void onClick$excluirEtapa(Event event) { //Excluir uma etapa
        Listitem listitem = listEtapas.getSelectedItem(); //Pega a etapa selecionada
        if (listitem != null) {
            eventoExcluir();
        } 
         
        else {
            setMensagemAviso("info", "Selecione uma Etapa!");
        }
    }

    public void onClick$incluirEtapa(Event event) { //Inclui uma nova etapa
        ctrl.abrirIncluirEtapa();
    }

    public void onClick$alterarEtapa(Event event) { //Altera uma etapa
        Listitem listitem = listEtapas.getSelectedItem(); //Pega a etapa selecionada
        if (listitem != null) {
            Etapa e = listitem.getValue();
            //Verificando se a etapa possui atividades vinculadas                        
            int result = ctrl.verificarEtapa(e);
            if(result==2)
            {
                setMensagemAviso("info", "A etapa já possui atividades vinculadas!");
            }
           
            else if(result==1)
            {
               ctrl.abrirEditarEtapa(e); 
            }
            else if(result==0)
            {
                setMensagemAviso("info", "A etapa já foi finalizada!");
            }
        }
        else 
        {
            setMensagemAviso("info", "Selecione uma etapa!");
        }
    }


    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
    
    public void eventoExcluir() //Método para mostrar uma mensagem de confirmação de exclusão
    {
        Messagebox.Button b1 = Messagebox.Button.YES;       
        Messagebox.Button b2 = Messagebox.Button.NO;
        Messagebox.Button [] b = new Messagebox.Button[2];
        b[0] = b1;
        b[1] = b2;

        EventListener <Messagebox.ClickEvent> e = new EventListener() { //Pegar o evento do click no mouse
            public void onEvent(Event evt) throws InterruptedException {
                if (evt.getName().equals("onYes")) {
                    Listitem listitem = listEtapas.getSelectedItem();
                    Etapa e = listitem.getValue();
                    
                    if (ctrl.apagarEtapa(e)) { //Verifica se pode apagar uma etapa, se for possivel ela é apagada
                        listEtapas.removeItemAt(listEtapas.getSelectedIndex());
                        setMensagemAviso("success", "Etapa excluída com sucesso!");
                    } 
                    else {
                        setMensagemAviso("error", "Não foi possível excluir a Etapa, já possui vinculos!");
                    }
                    
                }
            }
        };
        Messagebox.show("Deseja excluir a etapa?","Confirmação",b,Messagebox.QUESTION , e); //Menssage de confirmação de exclusão
    }
}
